#include"logistics.h"
#include"Administrator.h"

size_t cnt;					//最新商品位置

Goods goods[GOODS_MAX];		//商品

int login_index=-1;			//登录锁定标志

//商品码查重
int query_id(const char* id)
{
	for(int i=0; i<cnt; i++)
	{
        if(0 == strcmp(goods[i].id,id))
		    return i;
	}
	return -1;
}

//登录
void login_log(void)
{
	// 输入id
	char id[20];
	printf("请输入id：");
	get_str(id,sizeof(id));
	// 查询用户是否存在
	int index = query_log(id);
	if(-1 == index)
	{
		print_sec("该用户不存在，登录失败！",SECOND);
		return;
	}

	// 判断是否被锁
	if(hou_qin[index].lock >= 3)
	{
		print_sec("该用户已经被锁定，请联系管理员！",SECOND);
		return;
	}

	// 输入密码
	for(int i=0;i<3;i++)
	{	
		char passwd[7];
		printf("请输入密码：");
		get_passwd(passwd,sizeof(passwd));

		// 比较密码
		if(0 == strcmp(hou_qin[index].log_passwd,passwd))
		{
			// 初始化锁定标志
			hou_qin[index].lock = 0;
			// 记录登录成功的用户下标
			login_index = index;
			// 登录成功，进入子菜单
			menu_log();
			return;
		}
		
		// 锁定标志+1
		switch(++hou_qin[index].lock)
		{
		case 1: print_sec("密码错误，你还有2次机会！",SECOND); break;
		case 2: print_sec("密码错误，你还有1次机会！",SECOND); break;
		case 3: print_sec("三次密码错误，账号被锁定，请联系管理员修改密码！",SECOND); break;
		}
	}
}

//后勤管理菜单
void menu_log(void)
{
    for(;;)
	{
		system("clear");
		puts("***超市后勤管理模块***");
		puts("|    1.添加新商品    |");
		puts("|    2.下架商品      |");
		puts("|    3.商品补货      |");
		puts("|    4.商品报损      |");
    	puts("|    5.修改商品信息  |");
    	puts("|    6.查找商品      |");
		puts("|    7.遍历商品      |");
    	puts("|    8.退出登录      |");

		switch(get_cmd('1','8'))
		{
			case '1': add_goods();break;		//添加商品				
			case '2': del_goods();break;		//下架商品
			case '3': reple_goods();break;		//补货
      		case '4': reported_loss();break;	//报损
      		case '5': modify_goods();break;		//修改
      		case '6': find_goods();break;		//查找
      		case '7': show_goods();break;		//遍历
      		case '8': return;
		}
	}
}


//添加商品
void add_goods(void)
{
	// 判断用户是否已满
	if(cnt >= GOODS_MAX)
	{
		print_sec("商品列表已满，无法添加！",SECOND);
		return;
	}
    printf("请输入商品id：");
    get_str(goods[cnt].id,sizeof(goods[cnt].id));
	//商品查重
	if(-1 < query_id(goods[cnt].id))
	{
		print_sec("该货物已存在，添加失败！",SECOND);
		return;
	}
    
	printf("请输入该商品名称：");
    get_str(goods[cnt].name,sizeof(goods[cnt].name));

    printf("请输入该商品的定价：");
    scanf("%f",&goods[cnt].price);
    
	float number;
	printf("请输入数量：");
	scanf("%f",&number);
	int num = number;
	if(0>num || num!=number)
	{
		print_sec("数量输入有误!",SECOND);
		return;
	}
	goods[cnt].num += num;
	print_sec("添加成功！",SECOND);
	cnt++;
} 

//下架商品
void del_goods(void)
{
	char id[20];
	printf("请输入要删除的商品id：");
	get_str(id,sizeof(id));
	
	int index = query_id(id);
	if(-1 == index)
	{
		print_sec("查询不到该商品，删除失败！",SECOND);
		return;
	}
	if(yes_or_no())
  	{
		if(index < cnt-1)
		{
			goods[index] = goods[cnt-1];
		}
		cnt--;
		print_sec("商品下架成功！",SECOND);
  	}	
} 

//补货
void reple_goods(void)
{
	char id[20];
	float number;
  	printf("请输入要补货的商品id：");
  	get_str(id,sizeof(id));
  	int index = query_id(id);
  	if(-1 == index)
  	{
    	print_sec("查询不到该商品！",SECOND);
    	return;
  	}
  	printf("商品ID：%s\t 名称：%s\t 价格：%f\t 数量：%d\t\n",
			goods[index].id,goods[index].name,goods[index].price,goods[index].num);
  	
	printf("请输入数量：");
	scanf("%f",&number);
	int num = number;
	if(0>num || num!=number)
	{
		print_sec("数量输入有误!",SECOND);
		return;
	}
	goods[index].num += num;
	print_sec("添加成功！",SECOND);
	cnt++;
}

//报损
void reported_loss(void)
{
	char id[20];
	float number;
	printf("请输入要查找的商品id：");
	get_str(id,sizeof(id));

	int index = query_id(id);
	if(-1 == index)
	{
		print_sec("查询不到该商品！",SECOND);
		return;
	}
	printf("商品ID：%s\t 名称：%s\t 价格：%f\t 数量：%d\t\n",
			goods[index].id,goods[index].name,goods[index].price,goods[index].num);
	
	printf("请输入需要报损数量：");
	scanf("%f",&number);
	int num=number;
	if(0>num || num!=number || num>goods[index].num)
	{
		print_sec("数量输入有误!",SECOND);
		return;
	}

	if(!yes_or_no())
	{
		print_sec("取消报损!",SECOND);
		return;			
	}
	goods[index].num-=num;
	print_sec("报损成功！",SECOND);
	anykey_continue();
}

//修改
void modify_goods(void)
{
	char id[20];
  	printf("请输入要修改的商品id：");
  	get_str(id,sizeof(id));
  	for(int i=0;i<GOODS_MAX;i++)
  	{
	  	if(0!=strlen(id)&&0==strcmp(id,goods[i].id)&&yes_or_no())
	 	{
			printf("商品ID：%s\t 名称：%s\t 价格：%f\t 数量：%d\t\n",
			goods[i].id,goods[i].name,goods[i].price,goods[i].num);

	   		printf("请输入要修改商品的价格：");
	   		scanf("%f",&goods[i].price); 
	   		print_sec("修改成功！",SECOND);
	   		return;
	    }
	}
  	print_sec("未找到该商品，修改失败！",SECOND);
}

//查找
void find_goods(void)
{
	char id[20];
	printf("请输入要查询的商品id：");
	get_str(id,sizeof(id));

    int index = query_id(id);
	if(-1 == index)
	{
		print_sec("查询不到该商品！",SECOND);
		return;
	}
	printf("商品ID：%s\t 名称：%s\t 价格：%f\t 数量：%d\t\n",
			goods[index].id,goods[index].name,goods[index].price,goods[index].num);
	anykey_continue();
}

//遍历
void show_goods(void)
{
	if(0>=cnt)
		printf("当前没有商品！\n");
	for(int i=0; i<cnt; i++)
	{	
		printf("商品ID：%s\t 名称：%s\t 价格：%f\t 数量：%d\t\n",
			goods[i].id,goods[i].name,goods[i].price,goods[i].num);
	}
	anykey_continue();
}